import {
	BASE_URL,
	WX_APPID
} from './config';
var log = require('util/log.js');

export const requestData = (requestUrl,requestParam) => {
	let url = getApp().globalData.url + requestUrl
	let param = requestParam ? requestParam : ''
	return new Promise((resolve, reject) => {
		rerequest(url,param).then(res=>{
			resolve(res)
		})
		.catch((res)=>{
			console.log('发起请求失败：', res);
		})
	});
}

const rerequest = (url,param) => {
	return new Promise((resolve, reject) => {
		uni.request({
			url: url,
			method: 'POST',
			data: param,
			header: {
				'content-type': 'application/x-www-form-urlencoded',
				token: uni.getStorageSync('token')
			},
			success(res){
				if (res.data.code == 40000) {
					console.log("token失效了");
					uni.login({
						success(login) {
							wx.request({
								url: getApp().globalData.url + '/sys/reg',
								method: 'POST',
								data: {
									code: login.code,
								},
								header: {
									// 'content-type': 'application/json',
									'content-type': 'application/x-www-form-urlencoded',
								},
								success: (res) => {
									if (res.data.code == 20000) {
										uni.setStorageSync('token', res.data.data.token)
									}
									rerequest(url, param).then(res => {
										resolve(res);
									}).catch((err) => {
										console.log('发起请求失败：', err);
									});
								},
							
							})
						}
					})
				} else {
					resolve(res.data);
					if (res.data.code == 51000) {
						wx.showToast({
							icon: "error",
							title: res.data.msg
						})
					}
				}
			}
		})
	})
}




export const fetch = (url, param, options) => {
	let defaultOptions = {
		loading: true,
		loadingText: '数据加载中',
		toast: true,
		intercept: true
	}
	let newOptions = Object.assign({}, defaultOptions, options);

	let t = wx.getStorageSync('token');



	// if (!t) {
	// 	return new Promise((resolve, reject) => {
	// 		let url1 = `${BASE_URL}sys/reg`;
	// 		console.log(url1);
	// 		wx.login().then((d) => {
	// 			wx.request({
	// 				url: url1,
	// 				method: 'POST',
	// 				data: {
	// 					code: d.code,
	// 					appid: WX_APPID
	// 				},
	// 				header: {
	// 					// 'content-type': 'application/json',
	// 					'content-type': 'application/x-www-form-urlencoded',
	// 				},
	// 				success: (res) => {
	// 					if (res.data.code == 20000) {
	// 						console.log('token' + res.data.data.token)
	// 						wx.setStorageSync('token', res.data.data.token)
	// 					}

	// 					doRequest(url, param, newOptions).then(res => {
	// 						resolve(res);
	// 					}).catch((err) => {
	// 						console.log('发起请求失败：', err);
	// 					});
	// 				},

	// 			})
	// 		})
	// 	})
	// } else {
		return new Promise((resolve, reject) => {
			doRequest(BASE_URL + url, param, newOptions).then(res => {
				resolve(res);
			}).catch((err) => {
				console.log('发起请求失败：', err);
			});
		});
	// }
	// 使用Promise语法糖阻止请求方法的rejection一直上抛错误最终报错unhandled promise rejection的问题

}


const auth_Show = (p) => {
	// if (getApp().globalData.count >= 3) {
	// 	return console.log('连续错误>=3次，不再登录');
	// }
	// if (wx.getStorageSync('isLogin') == true) {
	// 	return;
	// }
	// wx.setStorageSync('isLogin', true);
	authLogin().then(() => {
		/* global getCurrentPages */
		if (p.data.intercept) {
			if (getCurrentPages().length !== 0) {
				console.log('登录成功，刷新页面');
				let pages = getCurrentPages();
				let curPage = pages[pages.length - 1];
				curPage.onLoad(curPage.data.options || curPage
					.options || {});
				curPage.onShow();
			}
		} else {
			// intercept==false 不做页面刷新
			if (getCurrentPages().length !== 0) {
				let pages = getCurrentPages();
				let curPage = pages[pages.length - 1];
				curPage.redo();
			}
		}
		// getApp().globalData.count = 0;
	}).catch(err => {
		console.log('授权失败:', err);
	});
}



const doRequest = (url, param, options) => {
	// if (wx.getStorageSync('isLogin') == true) {
	// 	return new Promise((resolve, reject) => {
	// 		reject('正在登录，拦截请求');
	// 	});
	// }
	// if (getApp().globalData.count >= 3) {
	// 	return new Promise((resolve, reject) => {
	// 		reject('连续错误>=3次，不再请求');
	// 	});
	// }
	// // 没有token或者token超时，拦截请求去登录
	// // checkTokenTimeOut(设下token时的时间戳，过期时间(秒，不传默认为一天))

	let params = {}
	const trim = (v) => typeof v == 'string' ? v.replace(/(^\s+)|(\s+$)/g, '') : v;
	if (param) {
		Object.keys(param).forEach(v => {
			params[trim(v)] = trim(param[v])
		})
	} else params = param
	options.loading &&
		wx.showNavigationBarLoading()
	return new Promise((resolve, reject) => {

		console.log("=====" + JSON.stringify(params))
		wx.request({
			url: url,
			data: params,
			method: options.method || 'POST',
			header: {
				'content-type': 'application/x-www-form-urlencoded', // 设置请求头信息
				// 'content-type': 'application/json', // 默认值
				'token': wx.getStorageSync('token') || '',
			},
			success: (p) => {
				// // 数据拦截处理
				// console.log(url, '：', p.data);
				// // #ifdef MP-WEIXIN

				// log.setFilterMsg('接口名：' + url);
				// // log.addFilterMsg('错误信息：' + p.data.return_msg);
				// log.info('请求参数：', params);
				// log.info('token：', wx.getStorageSync('token').token);
				// log.info('响应头：', p.header);
				// log.info('响应数据：', p.data);
				// // }
				// // // #endif
				if (p.data.code == 40000) {
					console.log("token失效了");
					let url1 = `${BASE_URL}sys/reg`;
					wx.login().then((d) => {
						wx.request({
							url: url1,
							method: 'POST',
							data: {
								code: d.code,
								appid: WX_APPID
							},
							header: {
								// 'content-type': 'application/json',
								'content-type': 'application/x-www-form-urlencoded',
							},
							success: (res) => {
								if (res.data.code == 20000) {
									console.log('token' + res.data.data
										.token)
									wx.setStorageSync('token', res.data.data
										.token)
								}
								doRequest(url, param, options).then(
									res => {
									
										resolve(res);
									}).catch((err) => {
									console.log('发起请求失败：', err);
								});
							},

						})
					});
				} else {
					wx.hideNavigationBarLoading()
					resolve(p.data);
					console.log('发起请求：===>'+ JSON.stringify(p.data));
					if (p.data.code == 51000) {
						// getApp().showToast(p.data
						// 	.msg || '')
						wx.showToast({
							icon:"error",
							title: p.data.msg || ''
						})
					}
				}
			},
			fail: (err) => {
				log.setFilterMsg('请求失败', err);
				log.info(err);
				options.loading && (wx.hideNavigationBarLoading())
				resolve(err)
			}
		})
	})
}